﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using BookStore.Solution.BLL;
using BookStore.Solution.Entities;
using BookStore.Solution.Utilities;

namespace BookStore.Solution.Presentation
{
    public partial class ucAccount : UserControl
    {
        AccountManager manager = new AccountManager();
        DataTable MyAccountTable = null;
        public ucAccount()
        {
            InitializeComponent();
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            frmAccount frm = new frmAccount();
            frm.ShowDialog();
            if (frm.NewAccount != null)
            {
                DataRow row = MyAccountTable.NewRow();
                object[] r = new object[4];
                r[0] = frm.NewAccount.UserName;
                r[1] = frm.NewAccount.Password;
                r[2] = frm.NewAccount.EmployeeID;
                r[3] = frm.NewAccount.Status;
                row.ItemArray = r;
                MyAccountTable.Rows.Add(row);
                LoadData(MyAccountTable);
            }
        }

        private void ucAccount_Load(object sender, EventArgs e)
        {
            MyAccountTable = manager.GetAll();
            LoadData(MyAccountTable);
        }

        private void LoadData(DataTable table)
        {
            dgvListofAccount.AutoGenerateColumns = false;
            dgvListofAccount.DataSource = table;
            for (int i = 0; i < dgvListofAccount.Columns.Count; i++)
            {
                dgvListofAccount.Columns[i].DataPropertyName = dgvListofAccount.Columns[i].Name;
            }
        }

        private void btnReset_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Bạn có chắc chắn reset mật khẩu cho tài khoản này không?", "Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.OK)
            {
                if (dgvListofAccount.SelectedRows.Count > 0)
                {
                    Account a = new Account();
                    a.UserName = DataUtil.ToString(dgvListofAccount.SelectedRows[0].Cells[0].Value, "");
                    a.Password = "12345678";
                    a.EmployeeID = DataUtil.ToString(dgvListofAccount.SelectedRows[0].Cells[2].Value, "");
                    a.Status = DataUtil.ToString(dgvListofAccount.SelectedRows[0].Cells[3].Value, "");
                    string resultText = manager.ResetPassword(a);
                    if (resultText == "Cập nhật thành công")
                    {
                        MessageBox.Show("Cập nhật thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        object[] r = new object[4];
                        r[0] = DataUtil.ToString(dgvListofAccount.SelectedRows[0].Cells[0].Value, "");
                        r[1] = "12345678";
                        r[2] = DataUtil.ToString(dgvListofAccount.SelectedRows[0].Cells[2].Value, "");
                        r[3] = DataUtil.ToString(dgvListofAccount.SelectedRows[0].Cells[3].Value, "");
                        MyAccountTable.Rows[dgvListofAccount.SelectedRows[0].Index].ItemArray = r;
                        LoadData(MyAccountTable);
                    }
                    else
                        MessageBox.Show(resultText, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                    MessageBox.Show("Phải chọn một tài khoản để reset", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnDelete_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Bạn có chắc chắn xóa tài khoản này không?", "Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.OK)
            {
                if (dgvListofAccount.SelectedRows.Count > 0)
                {
                    Account a = new Account();
                    a.UserName = DataUtil.ToString(dgvListofAccount.SelectedRows[0].Cells[0].Value, "");
                    a.Password = DataUtil.ToString(dgvListofAccount.SelectedRows[0].Cells[1].Value, "");
                    a.EmployeeID = DataUtil.ToString(dgvListofAccount.SelectedRows[0].Cells[2].Value, "");
                    a.Status = DataUtil.ToString(dgvListofAccount.SelectedRows[0].Cells[3].Value, "");
                    string resultText = manager.Delete(a);
                    if (resultText == "Xóa thành công")
                    {
                        MessageBox.Show("Xóa thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        MyAccountTable.Rows.RemoveAt(dgvListofAccount.SelectedRows[0].Index);
                        LoadData(MyAccountTable);
                    }
                    else
                        MessageBox.Show(resultText, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                    MessageBox.Show("Phải chọn một tài khoản để xóa", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnRefresh_Click(object sender, EventArgs e)
        {
            MyAccountTable = manager.GetAll();
            LoadData(MyAccountTable);
        }

        private void btnSearchByID_Click(object sender, EventArgs e)
        {
            frmSearchAccountByID frm = new frmSearchAccountByID();
            frm.ShowDialog();
            if (frm.SearchResult != null)
                LoadData(frm.SearchResult);

        }

        private void dgvListofAccount_Click(object sender, EventArgs e)
        {
            if (dgvListofAccount.SelectedRows.Count > 0)
            {
                Account a = ConvertRowtoAccount(dgvListofAccount.SelectedRows[0]);
                if (a.Status == "Bị khóa")
                {
                    btnBlock.Text = TSMIBlock.Text = "Mở khóa";
                }
                else
                {
                    btnBlock.Text = TSMIBlock.Text = "Khóa tài khoản";
                }
            }
        }

        private void dgvListofAccount_DoubleClick(object sender, EventArgs e)
        {
            if (dgvListofAccount.SelectedRows.Count > 0)
            {
                Account a = ConvertRowtoAccount(dgvListofAccount.SelectedRows[0]);
                frmAccount frm = new frmAccount(a);
                frm.ShowDialog();
            }
        }

        private Account ConvertRowtoAccount(DataGridViewRow row)
        {
            Account a = new Account();
            a.UserName = DataUtil.ToString(row.Cells[0].Value, "");
            a.Password = DataUtil.ToString(row.Cells[1].Value, "");
            a.EmployeeID = DataUtil.ToString(row.Cells[2].Value, "");
            a.Status = DataUtil.ToString(row.Cells[3].Value, "");
            return a;
        }

        private void btnBlock_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Bạn có chắc chắn " + btnBlock.Text.ToLower() + " tài khoản này không?", "Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.OK)
            {
                if (dgvListofAccount.SelectedRows.Count > 0)
                {
                    
                    Account a = new Account();
                    a.UserName = DataUtil.ToString(dgvListofAccount.SelectedRows[0].Cells[0].Value, "");
                    a.Password = DataUtil.ToString(dgvListofAccount.SelectedRows[0].Cells[1].Value, "");
                    a.EmployeeID = DataUtil.ToString(dgvListofAccount.SelectedRows[0].Cells[2].Value, "");
                    a.Status = DataUtil.ToString(dgvListofAccount.SelectedRows[0].Cells[3].Value, "") != "Bị khóa" ? "Bị khóa" : "Khả dụng";

                    string resultText = manager.UpdateStatus(a);
                    if (resultText == "Cập nhật thành công")
                    {
                        MessageBox.Show("Cập nhật thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        object[] r = new object[4];
                        r[0] = DataUtil.ToString(dgvListofAccount.SelectedRows[0].Cells[0].Value, "");
                        r[1] = DataUtil.ToString(dgvListofAccount.SelectedRows[0].Cells[1].Value, "");
                        r[2] = DataUtil.ToString(dgvListofAccount.SelectedRows[0].Cells[2].Value, "");
                        r[3] = a.Status;
                        MyAccountTable.Rows[dgvListofAccount.SelectedRows[0].Index].ItemArray = r;
                        LoadData(MyAccountTable);
                    }
                    else
                        MessageBox.Show(resultText, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                    MessageBox.Show("Phải chọn một tài khoản để xóa", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

    }
}
